package com.einmeer.kssc_administrator.service.impl;

import com.einmeer.kssc_administrator.entity.Instructor;
import com.einmeer.kssc_administrator.mapper.InstructorMapper;
import com.einmeer.kssc_administrator.scconst.InstructorConst;
import com.einmeer.kssc_administrator.service.InstructorService;
import com.einmeer.kssc_administrator.vo.ResultVo;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * @author 芊嵛
 * @date 2024/2/1
 */
@Service
@Transactional
public class InstructorServiceImpl implements InstructorService {
    @Resource
    private InstructorMapper instructorMapper;

    /**
     * 全部查询指导教师信息
     *
     * @return
     */
    @Override
    public ResultVo instructorAllInfo() {
        List<Instructor> list = instructorMapper.selectAllInstructor();
        if (list.isEmpty()) {
            return new ResultVo(InstructorConst.InstructorNO, InstructorConst.SELECTNO);
        }
        return new ResultVo(InstructorConst.InstructorOK, list, InstructorConst.SELECTOK);
    }

    /**
     * 添加指导老师根据姓名、学校、工号、职务、电话
     *
     * @param instructorName
     * @param instructorSchool
     * @param instructorJobNumber
     * @param instructorPosition
     * @param instructorPhone
     * @return
     */
    @Override
    public ResultVo addInstructorInfo(String instructorName, String instructorSchool, String instructorJobNumber, String instructorPosition, Long instructorPhone) {
        // 判断是否存在
        // 根据工号判断是否存在
        Long id1 = instructorMapper.selectInstructorByJobNumber(instructorJobNumber);
        // 根据电话判断是否存在
        Long id2 = instructorMapper.selectInstructorByPhone(instructorPhone);
        // 二者有一个能查询到,说明不能添加
        if (id1 != null || id2 != null) {
            return new ResultVo(InstructorConst.InstructorNO, InstructorConst.INSERTNO2);
        } else {
            int n = instructorMapper.insertInstructorByNameSchoolJobNumberPositionPhone(instructorName, instructorSchool, instructorJobNumber, instructorPosition, instructorPhone);
            if (n == 0) {
                return new ResultVo(InstructorConst.InstructorNO, InstructorConst.INSERTNO);
            } else {
                return new ResultVo(InstructorConst.InstructorOK, n, InstructorConst.INSERTOK);

            }
        }
    }

    /**
     * 删除指导教师，实际修改删除标记
     *
     * @param instructor
     * @return
     */
    @Override
    public ResultVo deleteInstructorById(Instructor instructor) {
        // 修改状态
        if (instructor.getInstructorState() == 0) {
            instructor.setInstructorState(1);
        } else {
            instructor.setInstructorState(0);
        }
        int n = instructorMapper.deleteInstructorById(instructor.getInstructorId(), instructor.getInstructorState());
        if (n == 1) {
            return new ResultVo(InstructorConst.InstructorOK, instructor.getInstructorState(), InstructorConst.DELECTOK);
        }
        return new ResultVo(InstructorConst.InstructorNO, InstructorConst.DELECTNO);
    }

    /**
     * 修改指导老师信息
     *
     * @param instructor
     * @return
     */
    @Override
    public ResultVo changeInstructorInfo(Instructor instructor) {
        // 判断是否存在
        // 根据工号判断是否存在
        Long id1 = instructorMapper.selectInstructorByJobNumber(instructor.getInstructorJobNumber());
        // 根据电话判断是否存在
        Long id2 = instructorMapper.selectInstructorByPhone(instructor.getInstructorPhone());
        // 如果和自己相同那就修改或者为空
        // 由于是包装类长度大于127，所以如果用等号比较,会比较地址，那我们就需要比较里面的值
        if ((instructor.getInstructorId().equals(id1)||id1==null)&&(instructor.getInstructorId().equals(id2)||id2==null)) {
            int n = instructorMapper.updateInstructorByInfo(instructor);
            if (n == 1) {
                return new ResultVo(InstructorConst.InstructorOK, n, InstructorConst.UPDATEOK);
            } else {
                return new ResultVo(InstructorConst.InstructorNO, InstructorConst.UPDATENO);
            }
        } else {
            return new ResultVo(InstructorConst.InstructorNO, "存在相同用户不能修改");
        }
    }

    /**
     * 根据id查询能修改的信息
     *
     * @param instructorId
     * @return
     */
    @Override
    public ResultVo queryOneInstructor(Long instructorId) {
        Instructor instructor = instructorMapper.selectOneInstructorById(instructorId);
        if (instructor != null) {
            return new ResultVo(InstructorConst.InstructorOK, instructor, InstructorConst.SELECTOK);
        }
        return new ResultVo(InstructorConst.InstructorNO, InstructorConst.SELECTNO);
    }

    /**
     * 根据姓名工号电话模糊查询
     * @param instructorName
     * @param instructorJobNumber
     * @param instructorPhone
     * @return
     */
    @Override
    public ResultVo queryLikeInstructor(String instructorName, String instructorJobNumber,Long instructorPhone) {
        List<Instructor> list = instructorMapper.selectLikeInstructor(instructorName, instructorJobNumber,instructorPhone);
        if (list.isEmpty()) {
            return new ResultVo(InstructorConst.InstructorOK, list, "空");
        }
        return new ResultVo(InstructorConst.InstructorOK, list, InstructorConst.SELECTOK);
    }



}
